#ifndef __HASH_H__
#define __HASH_H__

#include <stdio.h>
#include <stddef.h>
#include <pthread.h>  // 新增：线程库
#include <sys/types.h> // 新增：for size_t
#include "public.h"

#define HASH_BUCKET_COUNT 1000

// 哈希表节点结构（键和值均为字符串）
typedef struct HashNode {
    char* key;                // 键（字符串）
    char* value;              // 值（字符串）
    struct HashNode* next;    // 下一个节点（解决哈希冲突）
} HashNode;

// 哈希表结构（新增锁和持久化相关支持）
typedef struct HashTable {
    HashNode**buckets;        // 桶数组（每个元素是链表头指针）
    size_t bucket_count;      // 桶的数量
    size_t count;             // 当前元素总数
#if HASH_TABLE_MUTEX_LOCK
    pthread_mutex_t mutex_lock;  // 互斥锁（每个哈希表独有）
#endif
#if HASH_TABLE_RW_LOCK
    pthread_rwlock_t rw_lock;    // 读写锁（每个哈希表独有）
#endif
} HashTable;

// 原有函数声明
HashTable* hashtable_create(size_t bucket_count);
int hashtable_insert(HashTable* ht, const char* key, const char* value);
int hashtable_delete(HashTable* ht, const char* key) ;
char* hashtable_find(HashTable* ht, const char* key);
size_t hashtable_count(HashTable* ht);
void hashtable_destroy(HashTable* ht);
int hashtable_update(HashTable* ht, const char* key, const char* new_value);

// 新增函数声明
int hashtable_clear(HashTable* ht); // 清空所有节点，保留哈希表结构

// 全量持久化相关
int hashtable_full_store(HashTable* ht, const char* full_filename);
int hashtable_full_store_with_backup(HashTable* ht, const char* full_filename);
int hashtable_full_restore(const char* full_filename, HashTable* ht);

#endif